Option Explicit

' Form 初始化
Private Sub UserForm_Initialize()
    ' 初始化时，将区域框的内容设置为当前被选中的区域/单元格的地址
    rangeBox.text = Selection.Address
End Sub

' 为范围内的 table 生成数据
Private Sub createDataForRangeBtn_Click()
    ' 1. 检查数据数量的输入内容是否合法
    If dataCountBox.Value = "" Then
        MsgBox "please enter dataCount"
        Exit Sub
    End If

    Dim dataCount As Integer
    dataCount = Val(dataCountBox.Value)
    If dataCount <= 0 Then
        MsgBox "[dataCount] must be a number greater than 0."
        Exit Sub
    End If

    ' 2. 创建 sql 生成器
    Dim dc As TableDataCreator
    Set dc = createTableDataCreator

    ' 3. 生成随机数据
    dc.createSimpleRandomData ActiveSheet, dataCount, rangeBox.Value
End Sub

' 为整个 sheet 的 table 生成数据
Private Sub createDataForSheetBtn_Click()
    ' 1. 检查数据数量的输入内容是否合法
    If dataCountBox.Value = "" Then
        MsgBox "please enter dataCount"
        Exit Sub
    End If

    Dim dataCount As Integer
    dataCount = Val(dataCountBox.Value)
    If dataCount <= 0 Then
        MsgBox "[dataCount] must be a number greater than 0."
        Exit Sub
    End If

    ' 2. 创建 sql 生成器
    Dim dc As TableDataCreator
    Set dc = createTableDataCreator

    ' 3. 生成随机数据
    dc.createSimpleRandomData ActiveSheet, dataCount
End Sub

Private Function createTableDataCreator() As TableDataCreator
    ' 1. 创建 table 数据生成器
    Set createTableDataCreator = New TableDataCreator

    ' 2. 配置 table 数据生成器
    ' 设置: table 物理名所在的行号
    createTableDataCreator.tablePhyNameRowNo = Val(tablePhyNameRowNoBox.value)
    ' 设置: table 物理名标题列的标题内容
    createTableDataCreator.tablePhyNameTitleContent = tablePhyNameTitleContentBox.value
    ' 设置: 列逻辑名所在的行号
    createTableDataCreator.columnLogicNameRowNo = Val(columnLogicNameRowNoBox.value)
    ' 设置: 列物理名所在的行号
    createTableDataCreator.columnPhyNameRowNo = Val(columnPhyNameRowNoBox.value)
    ' 设置: 列类型所在的行号
    createTableDataCreator.columnTypeRowNo = Val(columnTypeRowNoBox.value)
    ' 设置: 列数据长度所在的行号
    createTableDataCreator.columnSizeRowNo = Val(columnSizeRowNoBox.value)
    ' 设置: 数据起始行所在的行号
    createTableDataCreator.dataStartRowNo = Val(dataStartRowNoBox.value)
    ' 设置: table 定义标题列的列号
    createTableDataCreator.defineTitleColNo = Val(defineTitleColNoBox.value)

End Function

